package top.huxy.boot.service;

import top.huxy.boot.model.dto.RegisterUserByEmailForm;
import top.huxy.boot.model.dto.UserLoginForm;
import top.huxy.boot.model.vo.user.VO_User;

/**
 * @Classname UserService
 * @Description UserService
 * @Date 2021/9/5 8:56
 * @Created by huxy
 */
public interface UserService {

    /**
     * 根据openId和accessToken请求QQ接口，返回用户对象
     * @param openId 必需
     * @param accessToken 必需
     * @return 是null则代表登录失败
     */
    VO_User qqLogin(String openId, String accessToken);

    /**
     * 发送邮件验证码
     * @param email 发发送验证码到哪个邮箱
     * @param yzm 一个凭证，正确才允许发送验证码
     */
    void requestEmailYzm(String email, String yzm);

    /**
     * 验证邮箱验证码是否正确。返回true会销毁验证码
     * @param email 邮箱
     * @param yzm 提交的验证码
     * @return true表示正确
     */
    boolean checkEmailYzm(String email, String yzm);

    /**
     * 根据表单注册用户
     * @param form 内容表单
     */
    void registerUserByEmail(RegisterUserByEmailForm form);

    /**
     * 根据表单进行登录。登录成功将cookie写入响应
     * @param form 登录表单
     * @return
     */
    VO_User userLogin(UserLoginForm form);

    /**
     * 根据token从redis中获取user
     * @param userToken
     * @return
     */
    VO_User getVOUserByToken(String userToken);

    void logOut(String userToken);
}
